]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspace: Move decision to show/hide chrome to clone
authorFlorian Müllner <fmuellner@gnome.org>
Wed, 19 Jul 2017 00:29:16 +0000 (02:29 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 10 Aug 2017 18:16:06 +0000 (20:16 +0200)
Currently the chrome layer decides itself which events on the window
clone should show or hide the chrome, which makes it harder to extent.
Instead, move the decision to the window clone by letting it emit
show/hide-chrome events when appropriate.

https://bugzilla.gnome.org/show_bug.cgi?id=783953

js/ui/workspace.js

index 888b21d6658b269d83d97ab033f8dd984cb7a7ee..4607f39818962c9763f46e5e7d0f925ef4975cfe 100644 (file)
@@ -157,6 +157,12 @@ var WindowClone = new Lang.Class({
         this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
         this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
 
+        this.actor.connect('enter-event', () => { this.emit('show-chrome'); });
+        this.actor.connect('key-focus-in', () => { this.emit('show-chrome'); });
+
+        this.actor.connect('leave-event', () => { this.emit('hide-chrome'); });
+        this.actor.connect('key-focus-out', () => { this.emit('hide-chrome'); });
+
         this._draggable = DND.makeDraggable(this.actor,
                                             { restoreOnSuccess: true,
                                               manualMode: true,
@@ -454,14 +460,8 @@ var WindowOverlay = new Lang.Class({
         button.connect('clicked', Lang.bind(this, this._closeWindow));
 
         windowClone.actor.connect('destroy', Lang.bind(this, this._onDestroy));
-        windowClone.actor.connect('enter-event',
-                                  Lang.bind(this, this._onEnter));
-        windowClone.actor.connect('leave-event',
-                                  Lang.bind(this, this._onLeave));
-        windowClone.actor.connect('key-focus-in',
-                                  Lang.bind(this, this._onEnter));
-        windowClone.actor.connect('key-focus-out',
-                                  Lang.bind(this, this._onLeave));
+        windowClone.connect('show-chrome', Lang.bind(this, this._onShowChrome));
+        windowClone.connect('hide-chrome', Lang.bind(this, this._onHideChrome));
 
         this._windowAddedId = 0;
 
@@ -651,25 +651,23 @@ var WindowOverlay = new Lang.Class({
         });
     },
 
-    _onEnter: function() {
+    _onShowChrome: function() {
         // We might get enter events on the clone while the overlay is
         // hidden, e.g. during animations, we ignore these events,
         // as the close button will be shown as needed when the overlays
         // are shown again
         if (this._hidden)
-            return Clutter.EVENT_PROPAGATE;
+            return;
 
         this._animateVisible();
         this.emit('show-close-button');
-        return Clutter.EVENT_PROPAGATE;
     },
 
-    _onLeave: function() {
+    _onHideChrome: function() {
         if (this._idleToggleCloseId == 0) {
             this._idleToggleCloseId = Mainloop.timeout_add(750, Lang.bind(this, this._idleToggleCloseButton));
             GLib.Source.set_name_by_id(this._idleToggleCloseId, '[gnome-shell] this._idleToggleCloseButton');
         }
-        return Clutter.EVENT_PROPAGATE;
     },
 
     _idleToggleCloseButton: function() {